home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PsL Monthly 1993 December
/
PSL Monthly Shareware CD-ROM (December 1993).iso
/
prgmming
/
dos
/
basic
/
pbtool.exe
/
LITEBAR2.BAS
< prev
next >
Wrap
BASIC Source File
|
1991-11-18
|
5KB
|
119 lines
'----------------------------------------------------------
' PROGRAM: LITEBAR2.BAS PROGRAMMER: A. KELLETT
' DATE-WRITTEN: 11/01/91
' USING POWER BASIC V2.10A
'
' THIS PROGRAM DISPLAYS A SIMPLE MENU WITH A FLOATING
' HILIGHTED BAR TO ALLOW EASY USER MENU CHOICES...
' VERSION: 1.00 LAST UPDATED: 11/12/91
'----------------------------------------------------------
$INCLUDE "KEYS.INC"
$INCLUDE "COLORS.INC"
CLS
'*** FOLLOWING ARE INITIAL SET UP VALUES FOR A QUICK DEMO ***
DIM MENU$(1:10)
XLINE% = 5:XCOLUMN% = 20
LOWVAL% = 1:HIVAL% = 10
MENU$(1) = " A....Format Floppy A: "
MENU$(2) = " B....Format Floppy B: "
MENU$(3) = " C....Spreadsheet "
MENU$(4) = " D....Desktop Pub. "
MENU$(5) = " E....Communications "
MENU$(6) = " F....Mainframe Xfer "
MENU$(7) = " G....Word Processor "
MENU$(8) = " H....Database "
MENU$(9) = " I....Time Scheduler "
MENU$(10) = " J....E-mail system "
KEYTOPRESS$ = " ABCDEFGHIJ" + UPARROW$ + DOWNARROW$ + CR$
CALL LITEBAR1(MENU$(), LOWVAL%, HIVAL%, XLINE%, XCOLUMN%, KEYTOPRESS$,KEYPRESSED%)
LOCATE 22,1:PRINT USING "USER CHOICE WAS ##. THE END...";KEYPRESSED%
END
' YOU NEED BOTH SUBROUTINES (LITEBAR1 AND LITEBAR2) IN YOUR PROGRAM.
' MENU.ARRAY$() - ARRAY CONTAINING THE MENU TEXT FOR ALL CHOICES
' LOWVAL% - LOWEST CHOICE, SHOULD <ALWAYS> BE 1 !
' HIVAL% - HIGHEST CHOICE, FOR 10 ITEM MENU SHOULD BE 10
' MLINE% - FIRST LINE TO DISPLAY MENU CHOICES ON
' MCOLUMN% - COLUMN TO START DISPLAYING MENU CHOICES ON
' VALIDKEYS$ - SHOULD CONTAIN ANY VALID KEYS YOU WILL ALLOW FOR
' IE. VALIDKEYS$ = " 01234567" + UPARROW$ + DOWNARROW$ + CR$
' BE SURE THE INITIAL SPACE IS IN THERE AND SEE CHARS.INC
' FOR DEFINED KEYS.
' KYPRESS% - CONTAINS A NUMBER REPRESENTING WHICH MENU CHOICE WAS
' HILIGHTED WHEN THE USER PRESSED THE <ENTER> KEY
' NOTES: THIS ROUTINE DOES NOT CHECK WHETHER THE MENU MAY GO BEYOND
' THE RIGHTMOST COLUMN AND "WRAP AROUND", AND IT DOESN'T
' CHECK WHETHER THE MENU WILL GO BEYOND THE LAST LINE OF
' THE DISPLAY AND "SCROLL UP" THE ENTIRE SCREEN.
'
'----------------------------------------------------------
SUB LITEBAR1(MENU.ARRAY$(), LOWVAL%, HIVAL%, MLINE%, MCOLUMN%, VALIDKEYS$, KYPRESS%)
SHARED UPARROW$, DOWNARROW$, CR$
QUITFLAG% = 0:OLD.POS% = 1:NEW.POS% = 1
'**** DISPLAY INITIAL MENU CHOICES ****
FOR I% = LOWVAL% TO HIVAL%
LOCATE I% + MLINE%,MCOLUMN%:PRINT MENU.ARRAY$(I%)
NEXT I%
LOCATE I% + MLINE% + 2, MCOLUMN%:PRINT "PRESS <Enter> TO EXIT"
'**** LOOP UNTIL USER PRESSES <RETURN> KEY ****
WHILE QUITFLAG% = 0
CALL LITEBAR2(MENU.ARRAY$(), OLD.POS%, NEW.POS%, MLINE%, MCOLUMN%)
DO
KEYIN$ = INKEY$
LOOP UNTIL INSTR(VALIDKEYS$, KEYIN$) > 1
IF (KEYIN$ = "0" OR KEYIN$ = CR$) THEN
KYPRESS% = NEW.POS% :REM** WHICH KEY WAS THE CHOICE ON ?? **
QUITFLAG% = 1:REM** EXIT THIS SUBROUTINE **
ELSE
IF (KEYIN$ = UPARROW$ AND NEW.POS% > LOWVAL%) THEN
OLD.POS% = NEW.POS%
NEW.POS% = NEW.POS% - 1
CALL LITEBAR2(MENU.ARRAY$(), OLD.POS%, NEW.POS%, MLINE%, MCOLUMN%)
ELSE
IF (KEYIN$ = DOWNARROW$ AND NEW.POS% < HIVAL%) THEN
OLD.POS% = NEW.POS%
NEW.POS% = NEW.POS% + 1
CALL LITEBAR2(MENU.ARRAY$(), OLD.POS%, NEW.POS%, MLINE%, MCOLUMN%)
ELSE
IF (KEYIN$ = UPARROW$ AND NEW.POS% = 1) THEN
OLD.POS% = 1
NEW.POS% = HIVAL%
CALL LITEBAR2(MENU.ARRAY$(), OLD.POS%, NEW.POS%, MLINE%, MCOLUMN%)
ELSE
IF (KEYIN$ = DOWNARROW$ AND NEW.POS% = HIVAL%) THEN
OLD.POS% = HIVAL%
NEW.POS% = LOWVAL%
CALL LITEBAR2(MENU.ARRAY$(), OLD.POS%, NEW.POS%, MLINE%, MCOLUMN%)
ELSE
IF (KEYIN$ <> DOWNARROW$ AND KEYIN$ <> UPARROW$) THEN
NEW.POS% = VAL(KEYIN$)
CALL LITEBAR2(MENU.ARRAY$(), OLD.POS%, NEW.POS%, MLINE%, MCOLUMN%)
END IF
END IF
END IF
END IF
END IF
END IF
WEND
END SUB
'
'
'----------------------------------------------------------
SUB LITEBAR2(MENU.ARRAY$(), OLD.POS%, NEW.POS%, MLINE%, MCOLUMN%)
SHARED BLACK%, HIGH.INTENSITY.WHITE%, WHITE%, RED%
'** BY ALTERNATING THE COLORS FOR EACH LINE, INSTEAD OF A HILIGHT BAR, **
'** YOU CAN HAVE A LINE OF DIFFERENT COLORED TEXT W/SAME COLOR BACKGROUND **
LOCATE OLD.POS% + MLINE%,MCOLUMN%
'*** SET COLORS FOR NORMAL TEXT AND REVERSE (HILIGHT) BARS BELOW ***
COLOR WHITE%,BLACK%:PRINT MENU.ARRAY$(OLD.POS%):COLOR BLACK%,WHITE%
LOCATE NEW.POS% + MLINE%,MCOLUMN%
'*** HILIGHT THE FOLLOWING LINE ***
COLOR BLACK, RED%:PRINT MENU.ARRAY$(NEW.POS%)
COLOR WHITE%, BLACK%
OLD.POS% = NEW.POS%
END SUB